package day05;
/*
    位运算符：
        &,|,^,~
        <<,>>,>>>

    注意：
        要做位运算，首先要把数据转换为二进制。
 */
public class OperatorDemo {
    public static void main(String[] args) {

        System.out.println(3 & 4);

        // & (且位运算)
        //法则：有0则0 (两个为1则是1)
        //      00000000 00000000 00000000 00000011
        // &    00000000 00000000 00000000 00000100
        //------------------------------------------
        //结果：00000000 00000000 00000000 00000000 = 0 D

        System.out.println(3 | 4);

        // | ( 且 位运算)
        //法则：有1则1 (两个为0则是0)
        //      00000000 00000000 00000000 00000011
        // &    00000000 00000000 00000000 00000100
        //------------------------------------------
        //结果：00000000 00000000 00000000 00000111 = 7 D

        System.out.println(3 ^ 4);

        // ^ ( 异或 位运算)
        //法则：相同则0，不同则1
        //      00000000 00000000 00000000 00000011
        // &    00000000 00000000 00000000 00000100
        //------------------------------------------
        //结果：00000000 00000000 00000000 00000111 = 7 D

        System.out.println(~3);

        // ~ ( 按位取反 运算)
        //法则：0变1，1变0
        //      00000000 00000000 00000000 00000011
        // ~    11111111 11111111 11111111 11111100(补码)
        //------------------------------------------
        //
        //      补码：11111111 11111111 11111111 11111100
        //      反码：11111111 11111111 11111111 11111011
        //      原码：00000000 00000000 00000000 00000100
        //      结果：-4

    }
}
